2024.7.23 bode_plot【control】
control.bode_plot() を用いて一次遅れ系
$ G(s) = \frac{K}{Ts+1}
のボード線図を描こう。ただし、$ T=1, K=1とする。
基本形
第1引数に渡したシステムのボード線図が描かれる。
code:bode1.py
import control as ct
import matplotlib.pyplot as plt
K, T = 1, 1
sys1 = ct.tf(K, T, 1)
ct.bode_plot(sys1)
plt.show()
https://scrapbox.io/files/669f46bad90cdb001d564073.png
横軸は角周波数(rad/s)であり、範囲は適当に決定される。
縦軸について、
ゲイン曲線(上のグラフ)
$ A(\omega) = |G(j\omega)|= Y/U
位相曲線(下側のグラフ)の単位は(deg)
$ \phi(\omega) = \angle G(j\omega) (deg)
複数システムのプロット
リストを用いて複数のシステムを渡すことができる。
code:bode2.py
import control as ct
import matplotlib.pyplot as plt
sys1 = ct.tf(1, 1, 1)
sys2 = ct.tf(1, 2, 1)
ct.bode_plot(sys1, sys2)
plt.show()
https://scrapbox.io/files/669f47e78c938e001dfe6cd2.png
範囲指定
第2引数は名前付き引数になっており、描画する周波数の範囲を指定することができる。周波数の数列を生成するにはlogspace【numpy】が適している。
code:bode3.py
import numpy as np
import control as ct
import matplotlib.pyplot as plt
omega = np.logspace(-2, 2, 100)
sys1 = ct.tf(1, 1, 1)
ct.bode_plot(sys1, omega=omega)
# ct.bode_plot(sys1, omega)
plt.show()
https://scrapbox.io/files/669f48b50a337e001c6ff472.png
周波数域が$ [10^{-2}, 10^{2}] に設定された。
omega__limits:上限と下限の指定
omega_num:プロット点数を指定
code:bode.py
import control as ct
import matplotlib.pyplot as plt
sys1 = ct.tf(1, 1, 1)
ct.bode_plot(sys1, omega_limits=0.01, 100, omega_num=7)
plt.show()
https://scrapbox.io/files/669f50df5fe2cb001df57281.png
名前付き引数を用いた微調整
table:微調整
引数名 True False
dB デシベル(dB) 値
Hz 周波数(Hz) ラジアン毎秒(rad/s)
deg 度数法(deg) 弧度法(rad)
code:bode4.py
import control as ct
import matplotlib.pyplot as plt
sys1 = ct.tf(1, 1, 1)
ct.bode_plot(sys1, dB=True, Hz=True, deg=False)
plt.show()
https://scrapbox.io/files/669f4c857c3f35001c67f58c.png
ゲイン曲線において、デフォルトのdB=Falseでは縦軸の範囲が$ [10^{-2}, 10^{2}] であったのが$ [-20, 0]となった。
$ A(\omega) = |G(j\omega)|_{\mathrm dB} = 20\log_{10} |G(j\omega)|
2024.7.23 安定余裕【control】